﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Resources;

using System.IO;
using System.Globalization;

using ID = System.String;
using Value = System.String;


namespace ResxusEngine
{
  

    #region Structures

    /// <summary>
    /// 두 파일의 값을 쌍으로 표현하는 구조체 
    /// </summary>
    public struct Values
    {
        /// <summary>
        /// Base or Value A
        /// </summary>
        public Value ValueA { get; set; }

        /// <summary>
        /// Work or Value B
        /// </summary>
        public Value ValueB { get; set; }

        public Values Merge(Values b)
        {
            string newA = (this.ValueA.Equals(string.Empty) == true ? b.ValueA : this.ValueA);
            string newB = (this.ValueB.Equals(string.Empty) == true ? b.ValueB : this.ValueB);

            return new Values() { ValueA = newA, ValueB = newB };
        }
    }

    #endregion

    public class Common
    { 

        #region Fill Helper Functions

        /// <summary>
        /// 두개 RC 파일을 바탕으로 
        /// 파일 작업에 필요한 데이터를 만듧니다. 
        /// </summary>
        /// <param name="fileAPath">A파일</param>
        /// <param name="fileBPath">B파일</param>
        /// <returns>비교가능한 RC 데이터 파일 테이블</returns>
        public static Dictionary<ID, Values> GenerateTable(FileInfo fileAPath, FileInfo fileBPath)
        {
            string fileAName = fileAPath.FullName;
            string fileBName = fileBPath.FullName;

            Dictionary<ID, Values> listC = new Dictionary<string, Values>();

            Reader.Fill(listC, fileAName, param => new Values() { ValueA = param, ValueB = string.Empty });
            Reader.Fill(listC, fileBName, param => new Values() { ValueA = string.Empty, ValueB = param });

            return listC;
        }
        
        #endregion


        #region ETC Helpers

        public static void ErrorHandler(Exception exc)
        {
            //Console.Beep();
            Console.WriteLine("Error {0}", exc.Message);
        }

        public static void FinishBeep()
        {
            Console.Beep(562, 30);
            Console.Beep(594, 30);
            Console.Beep(630, 30);
        }


        #endregion
    }
}
